package com.xzmzhp.controller.finance;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.xzmzhp.constant.ReturnConstant;
import com.xzmzhp.pojo.finance.FinanceType;
import com.xzmzhp.service.finance.FinanceTypeService;
import com.xzmzhp.utils.return_tool.ReturnData;
import com.xzmzhp.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;


/**
 * @author 王源(xm)
 * @Date: 2021/11/5 14:58
 * @Description: 财务类型信息前台交互页面
 */
@Controller
@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("/financeType")
public class FinanceTypeController {

    @Autowired
    private FinanceTypeService financeTypeService;

    /**
     * 根据id查询财务类型信息
     *
     * @param financeTypeId     财务类型id
     * @param financeTypeStatus 财务类别状态
     * @return 相关财务类型信息
     */
    ReturnData findFinanceTypeById(Integer financeTypeId, String financeTypeStatus) {
        //判断参数是否存在
        if (StringUtils.isNull(financeTypeId)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //查询相应财务类型信息
        FinanceType financeType = financeTypeService.findFinanceTypeById(financeTypeId, financeTypeStatus);
        if (financeType != null) {
            return ReturnData.ok(financeType);
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "没有找到该id的财务类型");
        }
    }

    /**
     * 根据财务类型名称查询财务信息
     *
     * @param financeTypeName   财务类型名称
     * @param financeTypeStatus 财务类别状态
     * @return 相关财务类型信息
     */
    ReturnData findFinanceTypeByName(@RequestParam("page") int page, @RequestParam("limit") int limit, String financeTypeName, String financeTypeStatus) {
        //判断参数是否存在
        if (StringUtils.isEmpty(financeTypeName) || StringUtils.isEmpty(financeTypeStatus)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //查询相应财务类型信息
        PageHelper.startPage(page, limit);
        List<FinanceType> list = financeTypeService.findFinanceTypeByName(financeTypeName, financeTypeStatus);
        if (StringUtils.isNotEmpty(list)) {
            PageInfo<FinanceType> pageInfo = new PageInfo<>(list);
            return ReturnData.ok(list, pageInfo.getTotal());
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "未查询到相应的服务类别信息");
        }
    }

    /**
     * 验证财务类型是否存在
     *
     * @param financeTypeName 财务类型名称
     * @return 财务信息
     */
    ReturnData checkFinanceTypeByName(String financeTypeName) {
        //判断参数是否存在
        if (StringUtils.isEmpty(financeTypeName)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //查询相应财务类型信息
        FinanceType financeType = financeTypeService.checkFinanceTypeByName(financeTypeName);
        if (financeType != null) {
            return ReturnData.ok(financeType, "该类型已存在，请确认后再添加");
        } else {
            return ReturnData.ok(null);
        }
    }

    /**
     * 查询所有财务类型信息
     *
     * @return 财务类型信息
     */
    ReturnData findFinanceType() {
        return financeTypeService.findFinanceType();
    }

    /**
     * 添加财务类型信息
     *
     * @param financeType 财务类型信息
     * @return 影响行数
     */
    ReturnData addFinanceType(FinanceType financeType) {
        //判断参数是否存在
        if (StringUtils.isNull(financeType)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //添加财务信息
        Integer i = financeTypeService.addFinanceType(financeType);
        if (i > 0) {
            return ReturnData.ok();
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "财务类型信息添加错误");
        }
    }

    /**
     * 修改财务类型信息
     *
     * @param financeType 财务类型
     * @return 影响条数
     */
    ReturnData updateFinanceType(FinanceType financeType) {
        //判断参数是否存在
        if (StringUtils.isNull(financeType)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //添加财务信息
        Integer i = financeTypeService.updateFinanceType(financeType);
        if (i > 0) {
            return ReturnData.ok();
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "财务类型信息修改错误");
        }
    }

    /**
     * 删除财务类型信息
     *
     * @param financeTypeId 财务类型id
     * @return 影响条数
     */
    ReturnData deleteFinanceType(int financeTypeId) {
        //判断参数是否存在
        if (StringUtils.isNull(financeTypeId)) {
            return ReturnData.error(ReturnConstant.FAIL, "请传入正确的参数");
        }
        //添加财务信息
        Integer i = financeTypeService.deleteFinanceType(financeTypeId);
        if (i > 0) {
            return ReturnData.ok();
        } else {
            return ReturnData.error(ReturnConstant.FAIL, "财务类型信息删除错误");
        }
    }
}
